package org.example.api;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.*;

@RestController
@RequestMapping("/hello")

public class HelloApi {
    @GetMapping("/m1")
    public Object m1(String name , String sex) {

        return "hello:" + name + sex;
    }
    @PostMapping("/m2")
    public Object m2(String name , String sex) {

        return "hello:" + name +"," + sex;
    }

    //拿到配置文件信息
    @Value("${local.file.path}")
    String localFilePath;
    //拿到配置文件信息

    @PostMapping("/m3")
    public Object m3(MultipartFile file) {           //java网络文件类型
        long size = file.getSize();
        Map map = new HashMap();

        if (size > 1024 * 1024 * 20) {   //限制文件大小在10MB以内
            map.put("code", "-1");
            map.put("message", "文件太大，不能超过10MB");
            return map;
        }
        //获取原名
        String fileName = file.getOriginalFilename();
        //获取文件扩展名
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        //支持的文件类型
        List<String> supposeSuffix = Arrays.asList(".pdf", "xls", ".xlsx");
        if (!supposeSuffix.contains(suffix)) {
            map.put("code", "-1");
            map.put("message", "文件格式不支持");
            return map;
        }
        //uuid生成,去除-与空格,并且大写
        String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

        //新的文件名为uuid加上文件后缀名
        fileName = uuid + suffix;

        //根据配置文件生成一个新的文件路径
        File filePath = new File(localFilePath);

        //若文件不存在，自动创建文件夹
        if (!filePath.exists()) {
            filePath.mkdirs();
        }

        //用新的文件名在路径创建一个本地文件
        File newFile = new File(filePath, fileName);
        try {
            //复制文件到newFile
            file.transferTo(newFile);
            map.put("code", "1");
            map.put("message", fileName);
        } catch (IOException e) {
            map.put("code", "-1");
            map.put("message", "文件上传失败！");
        }
        return map;
    }


}
